package com.brk.socket.common;

import lombok.AllArgsConstructor;
import lombok.Data;

@Data
@AllArgsConstructor
public class CommonResult<T> {

    private Integer code;
    private String message;
    private T data;


    /**
     * 成功返回的结果
     * @return
     */
    public static CommonResult success() {
        return new CommonResult(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), null);
    }

    /**
     * 成功返回的结果
     * @param data 返回数据
     * @return
     */
    public static CommonResult success(Object data) {
        return new CommonResult(ResultCodeEnum.SUCCESS.getCode(), ResultCodeEnum.SUCCESS.getMessage(), data);
    }

    /**
     * 成功返回的结果
     * @param message 提示信息
     * @return
     */
    public static CommonResult success(String message) {
        return new CommonResult(ResultCodeEnum.SUCCESS.getCode(), message, null);
    }

    /**
     * 成功返回结果
     * @param data 返回数据
     * @param message 提示信息
     * @return
     */
    public static CommonResult success(String message, Object data) {
        return new CommonResult(ResultCodeEnum.SUCCESS.getCode(), message, data);
    }

    /**
     * 成功返回结果
     * @param data 返回数据
     *
     * @return
     */
    public static CommonResult success(ResultCodeEnum resultCodeEnum, Object data) {
        return new CommonResult(resultCodeEnum.getCode(), resultCodeEnum.getMessage(), data);
    }


    /**
     * 失败返回结果
     * @param code 错误状态枚举
     * @return
     */
    public static CommonResult  failed(ResultCodeEnum code) {
        return new CommonResult(code.getCode(), code.getMessage(), null);
    }

    /**
     * 失败返回结果
     * @param code 错误状态枚举
     * @param message 提示信息
     * @return
     */
    public static CommonResult failed(ResultCodeEnum code, String message) {
        return new CommonResult(code.getCode(), message, null);
    }

    /**
     * 失败返回结果
     * @param code 错误状态枚举
     * @param data 返回数据
     * @return
     */
    public static CommonResult failed(ResultCodeEnum code, Object data) {
        return new CommonResult(code.getCode(), code.getMessage(), data);
    }

    /**
     * 失败返回结果
     * @param code 错误状态枚举
     * @param message 提示信息
     * @param data 返回数据
     * @return
     */
    public static CommonResult failed(ResultCodeEnum code, String message, Object data){
        return new CommonResult(code.getCode(), message, data);
    }
    /**
     * 失败返回结果
     * @param code 错误状态枚举
     * @param message 提示信息
     * @param data 返回数据
     * @return
     */
    public static CommonResult failed(Integer code, String message, Object data){
        return new CommonResult(code, message, data);
    }

    /**
     * 自定义响应枚举和数据
     * @param code
     * @param data
     * @return CommonResult<T>
     */
    public static <T> CommonResult<T> out(ResultCodeEnum code, T data) {
        return new CommonResult<T>(code.getCode(), code.getMessage(), data);
    }


    /**
     * 自定义响应枚举和数据
     * @param code
     * @param data
     * @return CommonResult<T>
     */
    public static <T> CommonResult<T> out(int code,String msg, T data) {
        return new CommonResult<T>(code, msg, data);
    }

    /**
     * 自定义响应枚举
     * @param code
     * @return CommonResult<T>
     */
    public static <T> CommonResult<T> out(ResultCodeEnum code) {
        return new CommonResult<T>(code.getCode(), code.getMessage(), null);
    }
}
